package com.macro.mall.service.impl;

import com.github.pagehelper.PageHelper;
import com.macro.mall.dao.PmsProductAttributeDao;
import com.macro.mall.dto.PmsProductAttributeParam;
import com.macro.mall.dto.ProductAttrInfo;
import com.macro.mall.mapper.PmsProductAttributeCategoryMapper;
import com.macro.mall.mapper.PmsProductAttributeMapper;
import com.macro.mall.model.PmsProductAttribute;
import com.macro.mall.model.PmsProductAttributeCategory;
import com.macro.mall.model.PmsProductAttributeExample;
import com.macro.mall.service.PmsProductAttributeService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author Administrator
 * 商品属性Service实现类
 * @date 2020/4/10
 * @since
 */
@Service
public class PmsProductAttributeServiceImpl implements PmsProductAttributeService {
	@Autowired
	private PmsProductAttributeMapper pmsProductAttributeMapper;
	@Autowired
	private PmsProductAttributeCategoryMapper pmsProductAttributeCategoryMapper;
	@Autowired
	private PmsProductAttributeDao productAttributeDao;

	@Override
	public List<PmsProductAttribute> getList(Long cid, Integer type, Integer pageSize, Integer pageNum) {
		PageHelper.startPage(pageNum,pageSize);
		PmsProductAttributeExample example = new PmsProductAttributeExample();
		example.setOrderByClause("sort desc");
		example.createCriteria().andProductAttributeCategoryIdEqualTo(cid).andTypeEqualTo(type);
		return pmsProductAttributeMapper.selectByExample(example);
	}

	@Override
	public int create(PmsProductAttributeParam pmsProductAttributeParam) {
		PmsProductAttribute pmsProductAttribute = new PmsProductAttribute();
		BeanUtils.copyProperties(pmsProductAttributeParam, pmsProductAttribute);
		int count = pmsProductAttributeMapper.insertSelective(pmsProductAttribute);
		//新增商品类型以后需要更新商品属性分类数量
		PmsProductAttributeCategory pmsProductAttributeCategory = pmsProductAttributeCategoryMapper.selectByPrimaryKey(pmsProductAttributeParam.getProductAttributeCategoryId());
		//如果PmsProductAttribute中type是属性的类型；0->属性；1->参数
		if(pmsProductAttribute.getType() == 0){
			pmsProductAttributeCategory.setAttributeCount(pmsProductAttributeCategory.getAttributeCount()+1);
		}else if(pmsProductAttribute.getType() == 1){
			pmsProductAttributeCategory.setParamCount(pmsProductAttributeCategory.getParamCount()+1);
		}
		pmsProductAttributeCategoryMapper.updateByPrimaryKey(pmsProductAttributeCategory);
		return count;
	}

	@Override
	public int update(Long id, PmsProductAttributeParam productAttributeParam) {
		PmsProductAttribute pmsProductAttributes = new PmsProductAttribute();
		pmsProductAttributes.setId(id);
		BeanUtils.copyProperties(productAttributeParam,pmsProductAttributes);
		return pmsProductAttributeMapper.updateByPrimaryKeySelective(pmsProductAttributes);
	}

	@Override
	public PmsProductAttribute getItem(Long id) {
		return pmsProductAttributeMapper.selectByPrimaryKey(id);
	}

	@Override
	public int delete(List<Long> ids) {
		//获取分类
		PmsProductAttribute pmsProductAttribute = pmsProductAttributeMapper.selectByPrimaryKey(ids.get(0));
		Integer type = pmsProductAttribute.getType();
		PmsProductAttributeCategory pmsProductAttributeCategory = pmsProductAttributeCategoryMapper.selectByPrimaryKey(pmsProductAttribute.getProductAttributeCategoryId());
		PmsProductAttributeExample example = new PmsProductAttributeExample();
		example.createCriteria().andIdIn(ids);
		int count = pmsProductAttributeMapper.deleteByExample(example);
		//删除完成后修改数量
		if(type==0){
			if(pmsProductAttributeCategory.getAttributeCount()>=count){
				pmsProductAttributeCategory.setAttributeCount(pmsProductAttributeCategory.getAttributeCount()-count);
			}else{
				pmsProductAttributeCategory.setAttributeCount(0);
			}
		}else if(type==1){
			if(pmsProductAttributeCategory.getParamCount()>=count){
				pmsProductAttributeCategory.setParamCount(pmsProductAttributeCategory.getParamCount()-count);
			}else{
				pmsProductAttributeCategory.setParamCount(0);
			}
		}
		pmsProductAttributeCategoryMapper.updateByPrimaryKey(pmsProductAttributeCategory);
		return count;
	}

	@Override
	public List<ProductAttrInfo> getProductAttrInfo(Long productCategoryId) {
		return productAttributeDao.getProductAttrInfo(productCategoryId);
	}

}
